"Bash" trong Linux là gì? Sử dụng "Bash" như thế nào?

Trong Linux, tự động hóa quy trình phụ thuộc rất nhiều vào kịch bản shell. Điều này bao gồm việc tạo ra một tệp chứa một loạt các lệnh có thể được thực thi cùng nhau.

Trong bài viết này, chúng ta sẽ bắt đầu với những kiến thức cơ bản về kịch bản bash, bao gồm biến, lệnh, đầu vào/đầu ra và gỡ lỗi. KDATA cũng sẽ chỉ ra các ví dụ về từng phần trên suốt hành trình.

Hãy bắt đầu nào. 🚀

Yêu cầu trước khi bắt đầu

Để theo dõi bài hướng dẫn này, bạn cần có:

  • Một phiên bản Linux đang chạy với quyền truy cập vào dòng lệnh.
  • Nếu bạn chưa cài đặt Linux hoặc chỉ mới bắt đầu, bạn có thể dễ dàng truy cập dòng lệnh Linux qua Replit. Replit là một IDE trên trình duyệt, nơi bạn có thể truy cập shell bash trong vài phút.
  • Bạn cũng có thể cài đặt Linux trên hệ thống Windows của mình bằng cách sử dụng WSL (Windows Subsystem for Linux). Đây là hướng dẫn cho việc đó.

Giới thiệu

Định nghĩa về kịch bản Bash

Một kịch bản bash là một tệp chứa một chuỗi các lệnh được thực thi bởi chương trình bash theo từng dòng. Nó cho phép bạn thực hiện một loạt các hành động, như điều hướng đến một thư mục cụ thể, tạo một thư mục và khởi động một quy trình sử dụng dòng lệnh.

Bằng cách lưu các lệnh này trong một kịch bản, bạn có thể lặp lại cùng một chuỗi bước nhiều lần và thực thi chúng bằng cách chạy kịch bản đó.

Ưu điểm của kịch bản Bash

Kịch bản bash là một công cụ mạnh mẽ và linh hoạt để tự động hóa các nhiệm vụ quản trị hệ thống, quản lý tài nguyên hệ thống và thực hiện các nhiệm vụ thường xuyên khác trong hệ thống Unix/Linux. Một số ưu điểm của kịch bản shell bao gồm:

  • Tự động hóa: Kịch bản shell cho phép bạn tự động hóa các nhiệm vụ và quy trình lặp đi lặp lại, tiết kiệm thời gian và giảm nguy cơ lỗi có thể xảy ra khi thực hiện thủ công.
  • Di động: Kịch bản shell có thể chạy trên nhiều nền tảng và hệ điều hành khác nhau, bao gồm Unix, Linux, macOS và thậm chí Windows thông qua việc sử dụng các trình giả lập hoặc máy ảo.
  • Linh hoạt: Kịch bản shell rất dễ tùy chỉnh và có thể dễ dàng sửa đổi để phù hợp với các yêu cầu cụ thể. Chúng cũng có thể được kết hợp với các ngôn ngữ lập trình hoặc tiện ích khác để tạo ra các kịch bản mạnh mẽ hơn.
  • Tiếp cận: Kịch bản shell dễ viết và không yêu cầu bất kỳ công cụ hay phần mềm đặc biệt nào. Chúng có thể được chỉnh sửa bằng bất kỳ trình soạn thảo văn bản nào, và hầu hết các hệ điều hành đều có sẵn trình thông dịch shell tích hợp.
  • Tích hợp: Kịch bản shell có thể được tích hợp với các công cụ và ứng dụng khác, chẳng hạn như cơ sở dữ liệu, máy chủ web và các dịch vụ đám mây, cho phép tự động hóa và quản lý hệ thống phức tạp hơn.
  • Gỡ lỗi: Kịch bản shell dễ dàng gỡ lỗi, và hầu hết các shell đều có công cụ gỡ lỗi và báo cáo lỗi tích hợp giúp xác định và sửa lỗi nhanh chóng.

Tổng quan về Bash shell và giao diện dòng lệnh

Các thuật ngữ "shell" và "bash" thường được sử dụng thay thế cho nhau. Tuy nhiên, có một sự khác biệt nhỏ giữa hai thuật ngữ này.

Thuật ngữ "shell" đề cập đến một chương trình cung cấp giao diện dòng lệnh để tương tác với hệ điều hành. Bash (Bourne-Again SHell) là một trong những shell Unix/Linux được sử dụng phổ biến nhất và là shell mặc định trong nhiều bản phân phối Linux.

Một shell hoặc giao diện dòng lệnh trông như thế này:

Tổng quan về Bash shell và giao diện dòng lệnh

Trong đầu ra trên, zaira@Zaira là dấu nhắc shell. Khi shell được sử dụng tương tác, nó hiển thị $ khi đang chờ lệnh từ người dùng.

Nếu shell đang chạy với quyền root (một người dùng có quyền quản trị), dấu nhắc sẽ được thay đổi thành #. Dấu nhắc shell của superuser trông như thế này:

[root@host ~]#

Mặc dù Bash là một loại shell, còn có các shell khác như Korn shell (ksh), C shell (csh) và Z shell (zsh). Mỗi shell có cú pháp và tập hợp tính năng riêng, nhưng chúng đều có mục đích chung là cung cấp giao diện dòng lệnh để tương tác với hệ điều hành.

Bạn có thể xác định loại shell của mình bằng cách sử dụng lệnh ps:

ps

Đây là đầu ra của tôi:

lệnh bash

Tóm lại, trong khi "shell" là một thuật ngữ rộng đề cập đến bất kỳ chương trình nào cung cấp giao diện dòng lệnh, "Bash" là một loại shell cụ thể được sử dụng rộng rãi trong các hệ thống Unix/Linux.

Lưu ý: Trong hướng dẫn này, chúng ta sẽ sử dụng shell "bash".

Cách bắt đầu với Bash Scripting

Chạy các lệnh Bash từ dòng lệnh

Như đã đề cập trước đó, dấu nhắc shell có dạng như sau:

[username@host ~]$

Bạn có thể nhập bất kỳ lệnh nào sau dấu $ và xem kết quả trên terminal.

Thông thường, các lệnh tuân theo cú pháp sau:

command [OPTIONS] arguments

Hãy cùng thảo luận một vài lệnh bash cơ bản và xem đầu ra của chúng. Hãy làm theo nhé :)

  • date: Hiển thị ngày hiện tại
zaira@Zaira:~/shell-tutorial$ date
Tue Mar 14 13:08:57 PKT 2023
  • pwd: Hiển thị thư mục làm việc hiện tại.
zaira@Zaira:~/shell-tutorial$ pwd
/home/zaira/shell-tutorial
  • ls: Liệt kê nội dung của thư mục hiện tại.
zaira@Zaira:~/shell-tutorial$ ls
check_palindrome.sh  count_odd.sh  env  log  temp
  • echo: In một chuỗi văn bản hoặc giá trị của một biến ra terminal.
zaira@Zaira:~/shell-tutorial$ echo "Hello bash"
Hello bash

Bạn luôn có thể tham khảo hướng dẫn của lệnh với lệnh man.

Ví dụ, hướng dẫn của lệnh ls trông như thế này:

sử dụng lệnh man

Cách Tạo và Thực Thi Kịch Bản Bash

Quy ước đặt tên

Theo quy ước, kịch bản bash kết thúc bằng .sh. Tuy nhiên, kịch bản bash có thể chạy hoàn toàn bình thường mà không cần phần mở rộng .sh.

Thêm Shebang

Kịch bản bash bắt đầu bằng shebang. Shebang là sự kết hợp của ký tự # và ký tự ! theo sau là đường dẫn tới bash shell. Đây là dòng đầu tiên của kịch bản. Shebang cho shell biết phải thực thi kịch bản này qua bash shell. Shebang chỉ đơn giản là một đường dẫn tuyệt đối tới trình thông dịch bash.

Dưới đây là ví dụ về dòng shebang.

#!/bin/bash

Bạn có thể tìm đường dẫn tới bash shell của mình (có thể khác so với trên) bằng cách sử dụng lệnh:

which bash

Tạo kịch bản bash đầu tiên 

Kịch bản đầu tiên sẽ yêu cầu người dùng nhập một đường dẫn. Đổi lại, nội dung của đường dẫn đó sẽ được liệt kê.

Tạo một tệp có tên là run_all.sh bằng lệnh vi. Bạn có thể sử dụng bất kỳ trình soạn thảo nào mà bạn thích.

vi run_all.sh

Thêm các lệnh sau vào tệp của bạn và lưu lại:

#!/bin/bash
echo "Today is " `date`

echo -e "\nenter the path to directory"
read the_path

echo -e "\nYour path has the following files and folders: "
ls $the_path

Kịch bản để in nội dung của thư mục do người dùng cung cấp
Hãy xem xét kỹ hơn kịch bản từng dòng một. Tôi sẽ hiển thị lại kịch bản này, nhưng lần này có thêm số dòng.

  1 #!/bin/bash
  2 echo "Today is " `date`
  3
  4 echo -e "\nenter the path to directory"
  5 read the_path
  6
  7 echo -e "\nYour path has the following files and folders: "
  8 ls $the_path
  • Dòng #1: Shebang (#!/bin/bash) chỉ tới đường dẫn của bash shell.
  • Dòng #2: Lệnh echo hiển thị ngày và giờ hiện tại trên terminal. Lưu ý rằng lệnh date nằm trong dấu ngược (`).
  • Dòng #4: Chúng ta muốn người dùng nhập vào một đường dẫn hợp lệ.
  • Dòng #5: Lệnh read đọc đầu vào và lưu nó vào biến the_path.
  • Dòng #8: Lệnh ls sử dụng biến chứa đường dẫn và hiển thị các tệp và thư mục hiện tại.

Thực thi kịch bản bash

Để làm cho kịch bản có thể thực thi, cấp quyền thực thi cho người dùng của bạn bằng lệnh này:

chmod u+x run_all.sh

Ở đây:

  • chmod thay đổi quyền sở hữu của tệp cho người dùng hiện tại.
  • +x thêm quyền thực thi cho người dùng hiện tại. Điều này có nghĩa là người dùng sở hữu tệp có thể chạy kịch bản.
  • run_all.sh là tệp mà chúng ta muốn chạy.

Bạn có thể chạy kịch bản bằng bất kỳ phương pháp nào sau đây:

sh run_all.sh
bash run_all.sh
./run_all.sh

Hãy xem nó hoạt động như thế nào 🚀

Cơ Bản Về Kịch Bản Bash

Bình luận trong kịch bản bash

Bình luận bắt đầu bằng ký tự # trong kịch bản bash. Điều này có nghĩa là bất kỳ dòng nào bắt đầu bằng # sẽ là bình luận và sẽ bị trình thông dịch bỏ qua.

Bình luận rất hữu ích trong việc ghi chú mã, và đó là một thực hành tốt để thêm chúng giúp người khác hiểu mã.

Ví dụ về bình luận:

# Đây là một ví dụ về bình luận
# Cả hai dòng này sẽ bị trình thông dịch bỏ qua

Biến và kiểu dữ liệu trong Bash

Biến cho phép bạn lưu trữ dữ liệu. Bạn có thể sử dụng biến để đọc, truy cập và thao tác dữ liệu trong suốt kịch bản của mình.

Không có kiểu dữ liệu trong Bash. Trong Bash, một biến có thể lưu trữ giá trị số, ký tự đơn lẻ hoặc chuỗi ký tự.

Trong Bash, bạn có thể sử dụng và thiết lập giá trị biến theo các cách sau:

1. Gán giá trị trực tiếp:

country=Pakistan

2. Gán giá trị dựa trên đầu ra nhận được từ một chương trình hoặc lệnh, sử dụng thay thế lệnh. Lưu ý rằng $ được yêu cầu để truy cập giá trị của biến hiện có.

same_country=$country

Điều này gán giá trị của country cho biến mới same_country. Để truy cập giá trị biến, thêm $ vào tên biến.

zaira@Zaira:~$ country=Pakistan
zaira@Zaira:~$ echo $country
Pakistan
zaira@Zaira:~$ new_country=$country
zaira@Zaira:~$ echo $new_country
Pakistan

Quy ước đặt tên biến

Trong kịch bản Bash, các quy ước đặt tên biến như sau:

  • Tên biến nên bắt đầu bằng chữ cái hoặc dấu gạch dưới (_).
  • Tên biến có thể chứa chữ cái, số và dấu gạch dưới (_).
  • Tên biến phân biệt chữ hoa và chữ thường.
  • Tên biến không nên chứa khoảng trắng hoặc ký tự đặc biệt.
  • Sử dụng tên mô tả phản ánh mục đích của biến.
  • Tránh sử dụng các từ khóa dành riêng, như if, then, else, fi, v.v., làm tên biến.

Ví dụ về các tên biến hợp lệ trong Bash:

name
count
_var
myVar
MY_VAR

Ví dụ về các tên biến không hợp lệ:

  • 2ndvar  # tên biến bắt đầu bằng số
  • my var  # tên biến chứa khoảng trắng
  • my-var  # tên biến chứa dấu gạch nối

Theo các quy ước đặt tên này giúp kịch bản Bash dễ đọc và dễ bảo trì hơn.

Đầu vào và đầu ra trong kịch bản Bash

Thu thập đầu vào

1. Đọc đầu vào từ người dùng và lưu nó vào một biến:

#!/bin/bash
echo "Today is " `date`

echo -e "\nenter the path to directory"
read the_path

echo -e "\nyour path has the following files and folders: "
ls $the_path

2. Đọc từ tệp

Mã này đọc từng dòng từ tệp input.txt và in nó ra terminal. Chúng ta sẽ tìm hiểu về vòng lặp while sau trong bài viết này.

while read line
do
  echo $line
done < input.txt

3. Tham số dòng lệnh

Trong một kịch bản hoặc hàm bash, $1 biểu thị đối số ban đầu được truyền, $2 biểu thị đối số thứ hai được truyền, và cứ thế.
Kịch bản này nhận một tên làm tham số dòng lệnh và in một lời chào cá nhân hóa.

echo "Hello, $1!"

Chúng ta đã cung cấp Zaira làm đối số cho kịch bản:

#!/bin/bash
echo "Hello, $1!"

Mã cho kịch bản: greeting.sh

Hiển thị đầu ra

Ở đây chúng ta sẽ thảo luận một số phương pháp nhận đầu ra từ các kịch bản.

1. In ra terminal:

echo "Hello, World!"

Điều này in văn bản "Hello, World!" ra terminal.

2. Ghi vào tệp:

echo "This is some text." > output.txt

Điều này ghi văn bản "This is some text." vào tệp output.txt. Lưu ý rằng toán tử > ghi đè một tệp nếu nó đã có nội dung.

3. Thêm vào tệp:

echo "More text." >> output.txt

Điều này thêm văn bản "More text." vào cuối tệp output.txt.

4. Chuyển hướng đầu ra:

ls > files.txt

Điều này liệt kê các tệp trong thư mục hiện tại và ghi đầu ra vào tệp files.txt. Bạn có thể chuyển hướng đầu ra của bất kỳ lệnh nào vào tệp theo cách này.

Xem thêm: Lệnh lsblk là gì? Sử dụng lsblk trên Linux để liệt kê tên thiết bị, phân vùng

Các lệnh Bash cơ bản (echo, read, v.v.)

Dưới đây là danh sách một số lệnh bash được sử dụng phổ biến nhất:

  • cd: Thay đổi thư mục đến một vị trí khác.
  • ls: Liệt kê nội dung của thư mục hiện tại.
  • mkdir: Tạo một thư mục mới.
  • touch: Tạo một tệp mới.
  • rm: Xóa một tệp hoặc thư mục.
  • cp: Sao chép một tệp hoặc thư mục.
  • mv: Di chuyển hoặc đổi tên một tệp hoặc thư mục.
  • echo: In văn bản ra terminal.
  • cat: Kết hợp và in nội dung của một tệp.
  • grep: Tìm kiếm một mẫu trong tệp.
  • chmod: Thay đổi quyền của một tệp hoặc thư mục.
  • sudo: Chạy một lệnh với quyền quản trị.
  • df: Hiển thị dung lượng đĩa còn trống.
  • history: Hiển thị danh sách các lệnh đã thực thi trước đó.
  • ps: Hiển thị thông tin về các quy trình đang chạy.

Câu lệnh điều kiện (if/else)

Biểu thức sản sinh ra kết quả boolean, hoặc đúng hoặc sai, được gọi là điều kiện. Có nhiều cách để đánh giá điều kiện, bao gồm if, if-else, if-elif-else, và điều kiện lồng nhau.

Cú pháp:

if [[ condition ]];
then
    statement
elif [[ condition ]]; then
    statement 
else
    do this by default
fi

Chúng ta có thể sử dụng các toán tử logic như AND -a và OR -o để so sánh có ý nghĩa hơn.

if [ $a -gt 60 -a $b -lt 100 ]

Câu lệnh này kiểm tra nếu cả hai điều kiện đúng: a lớn hơn 60 VÀ b nhỏ hơn 100.

Hãy xem ví dụ về một kịch bản Bash sử dụng if, if-else, và if-elif-else để xác định nếu một số do người dùng nhập vào là dương, âm, hoặc bằng không:

#!/bin/bash

echo "Please enter a number: "
read num

if [ $num -gt 0 ]; then
  echo "$num is positive"
elif [ $num -lt 0 ]; then
  echo "$num is negative"
else
  echo "$num is zero"
fi

Kịch bản để xác định nếu một số là dương, âm, hoặc bằng không.

Kịch bản đầu tiên yêu cầu người dùng nhập vào một số. Sau đó, nó sử dụng câu lệnh if để kiểm tra nếu số lớn hơn 0. Nếu đúng, kịch bản sẽ thông báo rằng số là dương. Nếu số không lớn hơn 0, kịch bản sẽ chuyển đến câu lệnh if-elif tiếp theo. Tại đây, kịch bản kiểm tra nếu số nhỏ hơn 0. Nếu đúng, kịch bản sẽ thông báo rằng số là âm. Cuối cùng, nếu số không lớn hơn 0 cũng không nhỏ hơn 0, kịch bản sử dụng câu lệnh else để thông báo rằng số là bằng không.

Hãy xem nó hoạt động như thế nào 🚀

Lặp và Phân Nhánh trong Bash

Vòng lặp While

Vòng lặp while kiểm tra điều kiện và lặp lại cho đến khi điều kiện đó còn đúng. Chúng ta cần cung cấp một câu lệnh bộ đếm để tăng giá trị bộ đếm nhằm kiểm soát việc thực thi vòng lặp.

Trong ví dụ dưới đây, (( i += 1 )) là câu lệnh bộ đếm tăng giá trị của i. Vòng lặp sẽ chạy chính xác 10 lần.

#!/bin/bash
i=1
while [[ $i -le 10 ]] ; do
   echo "$i"
   (( i += 1 ))
done

Vòng lặp while chạy 10 lần.

Vòng lặp For

Vòng lặp for, cũng giống như vòng lặp while, cho phép bạn thực thi các câu lệnh một số lần nhất định. Mỗi vòng lặp khác nhau về cú pháp và cách sử dụng.

Trong ví dụ dưới đây, vòng lặp sẽ lặp lại 5 lần.

#!/bin/bash
for i in {1..5}
do
    echo $i
done

Vòng lặp for chạy 5 lần.

Câu lệnh Case

Trong Bash, câu lệnh case được sử dụng để so sánh một giá trị với một danh sách các mẫu và thực thi một khối mã dựa trên mẫu đầu tiên khớp. Cú pháp cho một câu lệnh case trong Bash như sau:

case expression in
    pattern1)
        # mã thực thi nếu biểu thức khớp với pattern1
        ;;
    pattern2)
        # mã thực thi nếu biểu thức khớp với pattern2
        ;;
    pattern3)
        # mã thực thi nếu biểu thức khớp với pattern3
        ;;
    *)
        # mã thực thi nếu không có mẫu nào khớp với biểu thức
        ;;
esac

Ở đây, "expression" là giá trị mà chúng ta muốn so sánh, và "pattern1", "pattern2", "pattern3", v.v. là các mẫu mà chúng ta muốn so sánh.

Dấu chấm phẩy đôi ";;" tách mỗi khối mã thực thi cho mỗi mẫu. Dấu hoa thị "*" đại diện cho trường hợp mặc định, sẽ thực thi nếu không có mẫu nào khớp với biểu thức.

Ví dụ:

fruit="apple"

case $fruit in
    "apple")
        echo "This is a red fruit."
        ;;
    "banana")
        echo "This is a yellow fruit."
        ;;
    "orange")
        echo "This is an orange fruit."
        ;;
    *)
        echo "Unknown fruit."
        ;;
esac

Trong ví dụ này, vì giá trị của "fruit" là "apple", mẫu đầu tiên khớp và khối mã echo "This is a red fruit." được thực thi. Nếu giá trị của "fruit" là "banana", mẫu thứ hai sẽ khớp và khối mã echo "This is a yellow fruit." sẽ được thực thi, và cứ thế. Nếu giá trị của "fruit" không khớp với bất kỳ mẫu nào, trường hợp mặc định sẽ được thực thi, echo "Unknown fruit."

Cách lên lịch kịch bản bằng cron

Cron là một công cụ mạnh mẽ để lên lịch công việc có sẵn trong các hệ điều hành giống Unix. Bằng cách cấu hình cron, bạn có thể thiết lập các công việc tự động chạy hàng ngày, hàng tuần, hàng tháng, hoặc theo thời gian cụ thể. Khả năng tự động hóa mà cron cung cấp đóng vai trò quan trọng trong quản trị hệ thống Linux.

Dưới đây là cú pháp để lên lịch cron:

# Cron job example
* * * * * sh /path/to/script.sh

Ở đây, các * đại diện cho phút, giờ, ngày, tháng và ngày trong tuần tương ứng.

Dưới đây là một số ví dụ về việc lên lịch các công việc cron:

  • 0 0 * * *    Chạy một kịch bản vào lúc nửa đêm mỗi ngày : 0 0 * * * /path/to/script.sh
  • */5 * * * *    Chạy một kịch bản mỗi 5 phút : */5 * * * * /path/to/script.sh
  • 0 6 * * 1-5    Chạy một kịch bản vào lúc 6 giờ sáng từ thứ Hai đến thứ Sáu: 0 6 * * 1-5 /path/to/script.sh
  • 0 0 1-7 * *    Chạy một kịch bản vào 7 ngày đầu tiên của mỗi tháng: 0 0 1-7 * * /path/to/script.sh
  • 0 12 1 * *    Chạy một kịch bản vào ngày đầu tiên của mỗi tháng vào lúc trưa: 0 12 1 * * /path/to/script.sh

Sử dụng crontab

Tiện ích crontab được sử dụng để thêm và chỉnh sửa các công việc cron.

crontab -l liệt kê các kịch bản đã được lên lịch cho một người dùng cụ thể.

Bạn có thể thêm và chỉnh sửa cron thông qua crontab -e.

Cách gỡ lỗi và khắc phục sự cố kịch bản Bash

Gỡ lỗi và khắc phục sự cố là những kỹ năng quan trọng đối với bất kỳ ai viết kịch bản Bash. Mặc dù các kịch bản Bash có thể cực kỳ mạnh mẽ, chúng cũng có thể dễ gặp lỗi và hành vi không mong muốn. Trong phần này, chúng ta sẽ thảo luận một số mẹo và kỹ thuật để gỡ lỗi và khắc phục sự cố kịch bản Bash.

Đặt tùy chọn set -x

Một trong những kỹ thuật hữu ích nhất để gỡ lỗi kịch bản Bash là đặt tùy chọn set -x ở đầu kịch bản. Tùy chọn này kích hoạt chế độ gỡ lỗi, khiến Bash in mỗi lệnh mà nó thực thi ra terminal, kèm theo dấu +. Điều này có thể cực kỳ hữu ích trong việc xác định nơi mà lỗi xảy ra trong kịch bản của bạn.

#!/bin/bash

set -x

# Your script goes here

Kiểm tra mã thoát

Khi Bash gặp lỗi, nó sẽ đặt một mã thoát chỉ ra bản chất của lỗi. Bạn có thể kiểm tra mã thoát của lệnh gần nhất bằng cách sử dụng biến $?. Giá trị 0 chỉ ra thành công, trong khi bất kỳ giá trị nào khác chỉ ra lỗi.

#!/bin/bash

# Your script goes here

if [ $? -ne 0 ]; then
    echo "Error occurred."
fi

Sử dụng câu lệnh echo

Một kỹ thuật hữu ích khác để gỡ lỗi kịch bản Bash là chèn các câu lệnh echo vào trong mã của bạn. Điều này có thể giúp bạn xác định nơi mà lỗi xảy ra và giá trị nào đang được gán cho các biến.

#!/bin/bash

# Your script goes here

echo "Value of variable x is: $x"

# More code goes here

Sử dụng tùy chọn set -e

Nếu bạn muốn kịch bản của mình thoát ngay lập tức khi bất kỳ lệnh nào trong kịch bản thất bại, bạn có thể sử dụng tùy chọn set -e. Tùy chọn này sẽ khiến Bash thoát với lỗi nếu bất kỳ lệnh nào trong kịch bản thất bại, giúp dễ dàng xác định và sửa lỗi trong kịch bản của bạn.

#!/bin/bash
set -e
# Your script goes here

Khắc phục sự cố cron bằng cách kiểm tra nhật ký

Chúng ta có thể khắc phục sự cố cron bằng cách kiểm tra các tệp nhật ký. Nhật ký được duy trì cho tất cả các công việc đã lên lịch. Bạn có thể kiểm tra và xác minh trong nhật ký nếu một công việc cụ thể đã chạy như dự định hay không.

Đối với Ubuntu/Debian, bạn có thể tìm thấy nhật ký cron tại:

/var/log/syslog

Vị trí này khác nhau đối với các bản phân phối khác.

Một tệp nhật ký công việc cron có thể trông như thế này:

2022-03-11 00:00:01 Task started
2022-03-11 00:00:02 Running script /path/to/script.sh
2022-03-11 00:00:03 Script completed successfully
2022-03-11 00:05:01 Task started
2022-03-11 00:05:02 Running script /path/to/script.sh
2022-03-11 00:05:03 Error: unable to connect to database
2022-03-11 00:05:03 Script exited with error code 1
2022-03-11 00:10:01 Task started
2022-03-11 00:10:02 Running script /path/to/script.sh
2022-03-11 00:10:03 Script completed successfully

Kết luận

Trong bài viết này, chúng ta đã bắt đầu với cách truy cập terminal và sau đó chạy một số lệnh bash cơ bản. Chúng ta cũng đã nghiên cứu về bash shell. Chúng ta đã xem qua cách phân nhánh mã sử dụng các vòng lặp và điều kiện. Cuối cùng, chúng ta đã thảo luận về việc tự động hóa các kịch bản sử dụng cron cùng với một số kỹ thuật khắc phục sự cố.

Câu hỏi thường gặp

Bash trong Linux là gì?
  • Bourne Again Shell là một trình thông dịch dòng lệnh phổ biến trên các hệ điều hành Unix và Linux. Nó được sử dụng để thực thi các lệnh và kịch bản (scripts) nhằm tự động hóa các tác vụ hệ thống.
Mở Bash như thế nào?
  • Bạn chỉ cần mở Terminal. Trong hầu hết các hệ điều hành Linux, bạn sẽ tìm thấy Terminal trong menu ứng dụng hoặc sử dụng phím tắt Ctrl + Alt + T. Khi Terminal mở ra, bạn nhập và thực thi các lệnh.
Các lệnh Bash cơ bản trong Linux
  • ls: Liệt kê các tệp và thư mục trong thư mục hiện tại.
  • cd: Thay đổi thư mục hiện tại.
  • cp: Sao chép tệp hoặc thư mục.
  • mv: Di chuyển hoặc đổi tên tệp hoặc thư mục.
  • rm: Xóa tệp hoặc thư mục.
  • echo: Hiển thị một chuỗi văn bản hoặc biến.

Để tìm hiểu thêm về cách sử dụng các lệnh này, bạn có thể tham khảo tài liệu hướng dẫn hoặc sử dụng lệnh man để xem hướng dẫn chi tiết, ví dụ: man ls để xem hướng dẫn sử dụng lệnh ls.

Mọi người cùng tìm kiếm: bash, bash là gì, bash la gi, bash shell là gì, bash script là gì, bash -i